Subject: MINIX
From: [email-masked] (Andy Tanenbaum)
Date: 10 Jan 87 22:33:17 GMT
Newsgroups: comp.sys.ibm.pc,comp.sys.atari.st,comp.unix.wizards,comp.unix.xenix,comp.sources.d

First, I would like to apologize if I over-crossposted.  I haven't posted much
to the net before, so I may have done things wrong.  I was under the impression
that if one sends to multiple groups it cross posts them in such a way that
each reader only gets the message once, even if the reader subscribes to all 
of them.  If I am wrong will somebody please tell me how to do it (by mail).
It is also possible that I messed up.  Furthermore, we were having news and
mail problems at the time, which may have contributed.    It was my intention
that a lot of people see it once, not that a few people see it many times.

As to being commercial, that's true I guess, but since I am supplying 50,000
lines of source code without copy protection  for $79, and I don't mind a 
limited amount of copying of the binary and source code, it is not in the same 
league as normal PC software in terms of the owners zealously guarding both 
binaries and sources.  In fact, it is probably somewhat closer to the Free 
Software Foundation's way of doing things (also copyrighted) than to Lotus.  
I assumed (and judging by the response, probably correctly) that there would be
a fair amount of interest.  Sorry if I offended people.  

Maybe it would be best to set up comp.os.minix now.  Will everyone who would
want to subscribe to it send me mail.  If there is a sufficient number, I
will ask the local guru how one sets up a new group and try to avoid messing 
that up too.  I will cross post this to various groups, but just stick to 
comp.sys.ibm.pc or comp.os.minix (depending on the reaction) in the future.

Several people have asked me questions whose answers may be of general interest,
so I will post them here.

Q1: Can you have multiple users on a PC?
A1: In theory yes.  The terminal driver has an array indexed by terminal
    number from 0 to some maximum.  At present that maximum is 1, so you
    have to change a constant and recompile the tty driver.  Also, there
    is no RS232 driver (the deadline had a race with RS232 and the deadline
    won).  Therefore such a driver has to be made, but it is quite simple.
    Most of the hooks and handles you need are already there, for example,
    when it is time to output a character on tty n, the driver calls a
    function pointed to by tty_struct[n].tty_devstart, so each terminal
    can have a different routine to actually output the character. In this
    way you can mix various device types.

Q2: How compatible does a machine have to be to run MINIX?
A2: It needs a NEC uD765 chip as floppy disk controller, a Motorola 6845 as
    video controller, etc.  If the hard disk controller is nonstandard, the
    hard disk won't work, but the rest will.  Machines with different I/O
    chips but try to hide this by presenting the same BIOS interface won't
    work.  About a dozen different clones have been tested.  MINIX worked
    without problems on 80% and failed on 20%.

Q3: Can you call assembler routines from the MINIX C compiler in order to
    write drivers for new devices?
A3: Yes.  The C compiler uses the standard UNIX calling convention of pushing
    the parameters onto the stack in reverse order, so there is no problem
    writing bits of a program in assembler.  The assembly language accepted
    by the MINIX assembler is identical to that of PC-IX, the "official" IBM
    UNIX system for the PC.  Assembly routines for reading and writing I/O
    ports are present in the file kernel/klib88.s (port_in and port_out).

Q4: What do you mean it will sort of run on a 512K machine?
A4: It will boot fine and run ok with 512K, but since it doesn't swap, it
    won't be possible to run a lot of background jobs without running out
    of memory.  Also, if you use make, you may discover that make + cc +
    the various passes that get forked off may not fit in core at once, which
    causes EXECs to fail and make to get an error return.  This can be solved
    by changing the amount of stack space allocated to the compiler passes
    using the chmem utility.  (chmem is functionally the same as in PC-IX,
    which works the same way.)  Reducing the stack allocated to compiler
    passes means that some very large programs may not compile.  With a 640K
    system, files > 50K characters have compiled.  With 512K, that limit may
    be lower.

Andy Tanenbaum ([email-masked])